/**
 * @filename:SsoUserController 2020年2月14日
 * @project fuse-sso  V1.0
 * Copyright(c) 2020 BianPeng Co. Ltd. 
 * All right reserved. 
 */
package com.gitee.kinbug.quickstart.aid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

/**
 * <p>
 * 自动生成工具：mybatis-dsc-generator
 * </p>
 * 
 * <p>
 * 说明： API接口层
 * </P>
 * 
 * @version: V1.0
 * @author: BianPeng
 * @time 2020年2月14日
 */
public class AbstractController<S extends IService<T>, T> {

	@Autowired
	protected S baseService;

	protected ResultJson<T> result = new ResultJson<T>();

	/**
	 * @explain 查询对象 <swagger GET请求>
	 * @param 对象参数：id
	 * @return JsonResult
	 * @author BianPeng
	 * @time 2020年2月14日
	 */
	@GetMapping("/getById/{id}")
	@ApiOperation(value = "获取对象", notes = "作者：BianPeng")
	@ApiImplicitParam(paramType = "path", name = "id", value = "对象id", required = true, dataType = "Long")
	public ResultJson<T> getById(@PathVariable("id") Long id) {
		T obj = baseService.getById(id);
		if (null != obj) {
			result.success(obj);
		} else {
			result.error(ResultCode.NOT_FOUND);
		}
		return result;
	}

	/**
	 * @explain 删除对象
	 * @param 对象参数：id
	 * @return JsonResult
	 * @author BianPeng
	 * @time 2020年2月14日
	 */
	@PostMapping("/deleteById")
	@ApiOperation(value = "删除", notes = "作者：BianPeng")
	@ApiImplicitParam(paramType = "query", name = "id", value = "对象id", required = true, dataType = "Long")
	public ResultJson<?> deleteById(Long id) {
		ResultJson<T> result = new ResultJson<T>();
		T obj = baseService.getById(id);
		if (null != obj) {
			boolean rsg = baseService.removeById(id);
			if (rsg) {
				return ResultJson.SUCCESS;
			} else {
				result.error(ResultCode.SERVER_ERROR);
			}
		} else {
			result.error(ResultCode.NOT_FOUND);
		}
		return result;
	}

	/**
	 * @explain 添加
	 * @param 对象参数：T
	 * @return Boolean
	 * @author BianPeng
	 * @time 2020年2月14日
	 */
	@PostMapping("/insert")
	@ApiOperation(value = "添加", notes = "作者：BianPeng")
	public ResultJson<?> insert(T entity) {
		ResultJson<T> result = new ResultJson<T>();
		if (null != entity) {
			boolean rsg = baseService.save(entity);
			if (rsg) {
				return ResultJson.SUCCESS;
			} else {
				result.error(ResultCode.SERVER_ERROR);
			}
		} else {
			result.error(ResultCode.NOT_FOUND);
		}
		return result;
	}

	/**
	 * @explain 修改
	 * @param 对象参数：T
	 * @return Boolean
	 * @author BianPeng
	 * @time 2020年2月14日
	 */
	@PostMapping("/update")
	@ApiOperation(value = "修改", notes = "作者：BianPeng")
	public ResultJson<?> update(T entity) {
		ResultJson<T> result = new ResultJson<T>();
		if (null != entity) {
			boolean rsg = baseService.updateById(entity);
			if (rsg) {
				return ResultJson.SUCCESS;
			} else {
				result.error(ResultCode.SERVER_ERROR);
			}
		} else {
			result.error(ResultCode.BAD_REQUEST);
		}
		return result;
	}

	/**
	 * @explain 分页条件查询用户
	 * @param 对象参数：AppPage<SsoUser>
	 * @return PageInfo<SsoUser>
	 * @author BianPeng
	 * @time 2020年2月14日
	 */
	@GetMapping("/getPages")
	@ApiOperation(value = "分页查询", notes = "分页查询返回[IPage<T>],作者：BianPeng")
	public ResultJson<IPage<T>> getPages(PageParam<T> param) {
		ResultJson<IPage<T>> returnPage = new ResultJson<IPage<T>>();
		Page<T> page = new Page<T>(param.getPageNum(), param.getPageSize());
		QueryWrapper<T> queryWrapper = new QueryWrapper<T>();
		queryWrapper.setEntity(param.getParam());
		// 分页数据
		IPage<T> pageData = baseService.page(page, queryWrapper);
		returnPage.success(pageData);
		return returnPage;
	}
}
